package smartlifev30.com.sdk.api.gateway_app;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import java.util.List;

import smartlifev30.com.sdk.api.CallBack;
import smartlifev30.com.sdk.bean.request.CmdList;
import smartlifev30.com.sdk.bean.response.LoginResponse;


/**
 * Created by tys on 2018/8/13.
 */

public interface IDeviceMgmtGateway {

    /**
     * 查询设备列表，type_list为空时表示查询所有类型的设备列表
     *
     * @param userName
     * @param token
     * @param sn
     * @param typeList
     */
    void deviceQuery(@NonNull String userName, @NonNull String token, @NonNull String sn,
                     @Nullable List<String> typeList, @Nullable CallBack<LoginResponse> callBack);


    /**
     * 添加一个设备(主用户调用). IR,  Data Transport,  Combined Interface可以添加子设备,添加的子设备id由网关端返回给app
     *
     * @param userName
     * @param token
     * @param sn
     * @param protectType
     * @param deviceAttr
     * @param deviceName
     * @param protectId
     * @param roomId
     */
    void addDevice(@NonNull String userName, @NonNull String token, @NonNull String sn,
                   @NonNull String protectType, @NonNull String deviceAttr, @NonNull String deviceName,
                   @NonNull Integer protectId, @NonNull String roomId, @NonNull CallBack<LoginResponse> callBack);


    /**
     * 删除一个/多个设备,当device_list长度为0时表示清空所有设备,
     * 注意：网关端会同时删除该设备下的DeviceKey,并将其从场景列表，定时列表，联动列表，用户权限列表中删除
     *
     * @param userName
     * @param token
     * @param sn
     * @param deviceList 设备id清单。device_list长度为0时表示清空所有设备
     * @param callBack
     */
    void delDevice(@NonNull String userName, @NonNull String token, @NonNull String sn,
                   @Nullable List<Integer> deviceList, @NonNull CallBack<LoginResponse> callBack);


    /**
     * 编辑某一设备信息
     *
     * @param userName
     * @param token
     * @param sn
     * @param deviceId
     * @param deviceName
     * @param deviceAttr
     * @param roomId
     * @param cmdList    红外，数据透传类设备带有该字段
     * @param callBack
     */
    void editDevice(@NonNull String userName, @NonNull String token, @NonNull String sn,
                    @NonNull Integer deviceId, @NonNull String deviceName, @NonNull String deviceAttr,
                    @NonNull Integer roomId, @Nullable List<CmdList> cmdList, @NonNull CallBack<LoginResponse> callBack);


    /**
     * 查询某一设备的控制指令列表 ,用户红外类设备和数据透传类设备
     *
     * @param userName
     * @param token
     * @param sn
     * @param deviceId
     * @param callBack
     */
    void queryDeviceCmd(@NonNull String userName, @NonNull String token, @NonNull String sn,
                        @NonNull Integer deviceId, @NonNull CallBack<LoginResponse> callBack);



}
